package tech.aistar.prj.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

    /**
     * Date->指定pattern的String
     * @param date
     * @param pattern
     * @return
     */
    public static String format(Date date,String pattern){//Date->String
        if (date == null)//考虑date这个数据可能获取失败
            return null;
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }
    /**
     * 将字符串解析成日期
     * @param strDate
     * @param pattern
     * @return
     */
    public static Date parse(String strDate,String pattern){
        if (strDate == null || strDate.trim().length()==0)
            return null;
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date = null;
        try {
            date = sdf.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 根据指定的年月日来构建指定的日期对象
     */
    public static Date createDate(int year,int month,int date){
        Calendar cal = Calendar.getInstance();
        cal.set(year,month,date);
        return cal.getTime();
    }

    public static int getWeek(int year,int month,int date){
        Calendar cal = Calendar.getInstance();
        cal.set(year, month-1, date);
        return cal.get(Calendar.DAY_OF_WEEK)-1;
    }


    /**
     * 判断某年是否为闰年
     * @param year
     * @return true/false
     */
    public static boolean isLeapYear(int year){
        //if((year%400==0) || (year%4==0 && year%100!=0)){
        //    return true;
        //}else{
        //    return false;
        //}

        //{}中语句只有一条,可以省略不写
        //if((year%400==0) || (year%4==0 && year%100!=0))
        //    return true;
        //else
        //    return false;

        //return 除了可以返回一个结果,还可以用来结束整个方法的执行.
        //return语句一旦执行到了,那么这个方法就结束了,下面的代码是不会执行的 - return特性

        //if语句可以单独使用
        //if((year%400==0) || (year%4==0 && year%100!=0))
        //    return true;
        //return false;

        return (year%400==0) || (year%4==0 && year%100!=0);
    }

    /**
     * 返回某年某月的最大天数
     * @param year
     * @param month
     * @return
     */
    public static int getMaxDay(int year,int month){
        //定义一个变量,用来保存最大天数
        //建议定义变量的时候给定一个初始值
        //原因 - 变量在使用之前需要先进行初始化
        int max = -1;
        if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
            max = 31;
        else if(month==2){
            max = 28;
            //判断一下是否为闰年
            //boolean flag = isLeapYear(year);
            //if(isLeapYear(year))
            //    max++;

            //三目运算符
            max = isLeapYear(year)?29:28;
        }else{//小月
            max = 30;
        }
        return max;
    }
}
